/*
Button.hpp
--------------

Par Bréhaut Vincent le 13/03/2011

Rôle: Créer, afficher et gérer les boutons
*/

#ifndef DEF_BUTTON
#define DEF_BUTTON

#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <vector>
#include "Widget.hpp"
#include "../Engine.hpp"

namespace GUI
{
    class Button : public Widget
    {
        public:
            Button(Engine &Moteur, const sf::String &text=sf::String(""));
            virtual bool IsHover();

            void SetRect(const std::vector< sf::IntRect> &rects);
            void SetImage(const unsigned int id);
            void SetText(const sf::String &text=sf::String(""));

            virtual void Afficher();
            virtual void UpdateEvent();
        protected:
            bool m_clicked; // Regarde si le bouton avais été presser
            sf::Text m_text; // Texte du bouton
            sf::Sprite m_image; // Image du bouton
            std::vector<sf::IntRect> m_rects; // Morceaux d'images du bouton
            //Sons
            sf::SoundBuffer m_buffer;
            sf::Sound m_son; // Son émis lors du clique sur le bouton
    };

    class OpenButton : public Button
    {
        public:
            OpenButton(Engine &Moteur);
    };

    class CloseButton : public Button
    {
        public:
            CloseButton(Engine &Moteur);
    };
    // Boutons des onglets
    class Onglet : public Button
    {
        public:
            Onglet(Engine &Moteur, const sf::String &text=sf::String(""));
            void SetFocus(bool focus);
            bool IsFocused();
        protected:
            bool m_focus;
    };
}

#endif
